﻿// Copyright (c) 2011 Vratislav Cermak (vratacermak@gmail.com)
//  
// This file is part of SrtSync Project. See http://code.google.com/p/srtsync/ for more information.
//  
// SrtSync is an open source project. Using of SrtSync is free of charge.
// It is distributed under GNU General Public License version 3 (GPLv3).
// GPLv3 can be found at http://www.gnu.org/licenses/gpl.html.
//  
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE.  See the license for more details.

using System.Collections.Generic;
using SrtSync.Core.Framework;

namespace SrtSync.Core
{
    public class Observable<T> : IObservable<T>
    {
        private readonly List<IObserver<T>> _observers = new List<IObserver<T>>();

        public void Register(IObserver<T> observer)
        {
            _observers.Add(observer);
        }

        public void UnRegister(IObserver<T> observer)
        {
            _observers.Remove(observer);
        }

        protected void Notify(T data)
        {
            _observers.ForEach(x => x.Process(data));
        }
    }
}
